package model

import (
	"encoding/json"
	"ginblog/dao"
	"time"

	"github.com/go-redis/redis"
)

//Article 文章
type Article struct {
	ID         int    `json:"id" form:"id"`
	Title      string `json:"title" form:"title"`
	Tags       string `json:"tags" form:"tags"`
	Short      string `json:"short" form:"short"`
	Content    string `json:"content" form:"content"`
	Author     string `json:"Author" form:"Author"`
	Createtime int64  `json:"createtime" form:"createtime"`
}

//AddArtcle 添加数据
func AddArtcle(a *Article) (err error) {
	err = dao.DB.Create(a).Error
	return
}

//GetAllArtcle 查询全部数据
func GetAllArtcle(aList *[]Article) (err error) {
	err = dao.DB.Find(aList).Error
	return
}

//GetAArtcle 获取单个数据，使用了redis
func GetAArtcle(id string, art *Article) (err error) {

	//先看redis里有没有数据
	val, err := dao.RedisDb.Get(id).Result()
	if err == redis.Nil || err != nil { //如果没有就从数据库查询，返回数据的同时写入redis
		err = dao.DB.Where("id=?", id).First(art).Error
		if err != nil {
			return err
		}
		//json化并存入redis
		artcontent, err := json.Marshal(art)
		if err != nil {
			return err
		}
		//存入数据的key 应该加前缀，这边是测试暂时没加
		err = dao.RedisDb.Set(id, artcontent, time.Minute*5).Err()
		if err != nil {
			return err
		}
	} else if err = json.Unmarshal([]byte(val), art); err != nil {
		return err
	}
	//最后没问题就返回nil
	return nil
}

//UpdateArtcle 修改数据
func UpdateArtcle(a *Article) (err error) {
	err = dao.DB.Save(a).Error
	return
}

//DeleteArtcle 删除数据
func DeleteArtcle(id string) (err error) {
	err = dao.DB.Where("id=?", id).Delete(&Article{}).Error
	return
}
